<?php

/*
 * Коллекция инициализированных адаптеров, настроенных на модели
 */

namespace T4\MODEL;

use T4\Exception;
use T4\Model;

class AdapterCollection extends \T4\Collection {
    
    /**
     * Возвращает адаптер, настроенный на модель
     * @param string $modelClassName Имя класса модели
     * @return T4\Adapter 
     */
    public static function getInstance($modelClassName) {
                
        if ( !isset($this[$modelClassName]) ) {
            
            if ( !class_exists($modelClassName, true) )
                throw new Exception('Попытка получить адаптер для несуществующего класса модели ' . $modelClassName);

            if ( !is_subclass_of($modelClassName, '\\T4\\Model') )
                throw new Exception('Класс ' . $modelClassName . ' не является классом модели');

            $schema = $modelClassName::getSchema();
            $adapter = isset($schema['adapter']) ? $schema['adapter'] : Model::DEFAULT_ADAPTER;
            $adapter = __NAMESPACE__ . '\\' . ucfirst($adapter) . 'Adapter';
            $this[$modelClassName] = new $adapter($modelClassName);
            
        }
        
        return $this[$modelClassName];
        
    }
    
}